package com.bs.web.controller;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.bs.model.Msg;
import com.bs.service.IMsgService;
import com.bs.vo.PageParamVo;
import com.bs.vo.PageVo;
import com.bs.vo.RestResultVo;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;

/**
 * 说明：
 *
 * @author 陈晓琪
 * @since 2025年05月23日 星期五 07:48:29
 */
@RestController
@RequestMapping("msg")
@Api(tags = "消息接口")
public class MsgController {

    @Autowired
    private IMsgService msgService;

    @PostMapping("add")
    @ApiOperation(value = "添加消息")
    public RestResultVo<Msg> addMsg(@RequestBody Msg msg) {
        msgService.save(msg);
        return RestResultVo.ok(msg);
    }

    /**
     * // 学习swagger @ApiParam 与 @RequestParam 使用
     * // @ApiParam("消息id") @RequestParam(name = "id") 这两个要结合这一起用, 不然返回 type 会放在 schema.type 下, 这样页面会显示为textarea, 显示为多行
     *
     * @param id 消息id
     * @return 删除消息
     */
    @GetMapping("delete")
    @ApiOperation(value = "删除消息")
    public RestResultVo<Boolean> deleteMsg(@ApiParam("消息id") @RequestParam(name = "id") String id) {
        msgService.removeById(id);
        return RestResultVo.success();
    }

    @PostMapping("update")
    @ApiOperation(value = "修改消息")
    public RestResultVo<Msg> updateMsg(@RequestBody Msg msg) {
        msgService.updateById(msg);
        return RestResultVo.ok(msg);
    }

    @GetMapping("query")
    @ApiOperation(value = "查询消息")
    public RestResultVo<Msg> queryMsg(@ApiParam("消息id") @RequestParam(name = "id") String id) {
        Msg msg = msgService.getById(id);
        return RestResultVo.ok(msg);
    }

    @PostMapping("list")
    @ApiOperation(value = "查询消息列表")
    public RestResultVo<List<Msg>> listMsg(@RequestBody Msg msg) {
        List<Msg> list = msgService.list(new QueryWrapper<>(msg));
        return RestResultVo.ok(list);
    }

    @PostMapping("page")
    @ApiOperation(value = "查询消息分页")
    public RestResultVo<PageVo<Msg>> pageMsg(@RequestBody PageParamVo<Msg> pageParam) {
        PageVo<Msg> msgPageVo = msgService.pageMsg(pageParam);
        return RestResultVo.ok(msgPageVo);
    }

}
